package com.yuw.action;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.yuw.bean.AdminInfoBean;
import com.yuw.service.ILoginService;
import com.yuw.utils.MyUtils;

// @RestController等价于@Controller和@ResponseBody
@RestController
public class RESTFulAction {

	// 依赖注入【反转控制】
	// 面向接口的编程
	@Resource
	private ILoginService loginS;// 按名称匹配进行注入

	@RequestMapping(value = "/adminInfo/{adminId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
	public ResponseEntity<List<AdminInfoBean>> restQueryAdminInfo_GetId(@PathVariable("adminId") Integer adminId) {
		// ResponseEntity<List<AdminInfoBean>> re = new
		// ResponseEntity<List<AdminInfoBean>>(null);
		// 调用service层进行查询操作
		List<AdminInfoBean> lstAdmins = loginS.selectByPrimaryKeyList(adminId);

		// 直接返回查询结果集即可，springmvc框架自动将结果集转换为json字符串返回给客户端
		return ResponseEntity.status(HttpStatus.OK).body(lstAdmins);
	}

	@RequestMapping(value = "/adminInfo/", method = RequestMethod.GET)
	public ResponseEntity<List<AdminInfoBean>> restQueryAdminInfo_GetAll() {
		//System.out.println("查询条件实体类："+adminB);
		// 调用service层进行查询操作
		List<AdminInfoBean> lstAdmins = loginS.selectAllInfos();
		// 直接返回查询结果集即可，springmvc框架自动将结果集转换为json字符串返回给客户端
		// return new ResponseEntity<>(lstAdmins, HttpStatus.OK);
		// <> 语法用法，要求maven编译器使用的版本>=1.7，可以在项目右键--> project facets 修改java的版本
		// 也可以使用1.5的版本语法方式
		return new ResponseEntity<List<AdminInfoBean>>(lstAdmins, HttpStatus.OK);

	}

//,headers="multipart/form-data"  @RequestParam("file_adminimg") MultipartFile file_adminimgs,
	/**
	 * 注意：如果发送的request请求的form类型是 multipart/form-data，则 参数实体不需要使用注解 @RequestBody
	 * 注解符对实体参数进行修饰，springmvc框架会自动对其按名字进行数据类型转换 会自动进行实体类的映射处理
	 */
	@RequestMapping(value = "/adminInfo/", method = RequestMethod.POST)
	public ResponseEntity<List<AdminInfoBean>> restQueryAdminInfo_PutSave(AdminInfoBean adminB,
			HttpServletRequest request) {
		// 调用utils的方法，进行文件上传处理
		MyUtils.uploadFilesWithRequest(request, adminB, "adminImgs", "amdinImg");
		// TODO 调用service层，保存实体对象 adminB到数据库；

		// 调用service层进行查询操作--业务要求新增之后倒序显示数据库中的数据
		List<AdminInfoBean> lstAdmins = loginS.selectAllInfos();
		// 直接返回查询结果集即可，springmvc框架自动将结果集转换为json字符串返回给客户端
		// return new ResponseEntity<>(lstAdmins, HttpStatus.OK);
		// <> 语法用法，要求maven编译器使用的版本>=1.7，可以在项目右键--> project facets 修改java的版本
		// 也可以使用1.5的版本语法方式
		return new ResponseEntity<List<AdminInfoBean>>(lstAdmins, HttpStatus.OK);

	}

	@RequestMapping(value = "/adminInfo/{adminId}", method = RequestMethod.DELETE)
	public ResponseEntity<List<AdminInfoBean>> restDeleteAdminInfo_DeleteById(
			@PathVariable("adminId") Integer adminId) {
		// 调用service层进行逻辑删除
		int i = loginS.logicDeleteByPrimaryKey(adminId);

		// 根据删除操作结果进行转发处理
		// 调用service层进行查询操作
		// 需要进行修订，查询条件应该是删除时的查询的条件
		// TODO 待优化
		List<AdminInfoBean> lstAdmins = loginS.queryInfoByParams(new AdminInfoBean());
		// 直接返回查询结果集即可
		return ResponseEntity.status(HttpStatus.OK).body(lstAdmins);

	}
}